/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Produccion;

import Controlador.Bean.Produccion.Ingrediente;
import Controlador.Bean.Produccion.ProductoF;
import Controlador.Bean.Produccion.Receta;
import Controlador.Bean.Produccion.Fase;
import Controlador.Bean.Produccion.Maquina;
import Controlador.Bean.Produccion.PlanV;
import Controlador.Bean.Produccion.ProduccionReal;
import Controlador.Bean.Produccion.ProduccionRealRB;
import Controlador.Bean.Produccion.ProductoReceta;
import Controlador.Bean.Produccion.ProductoxFase;
import Controlador.Bean.Produccion.ProductoxFaseN;
import Controlador.Bean.Produccion.TipoProducto;
import Controlador.Bean.Produccion.TipoMaquina;
import Controlador.Service.Produccion.ServicioProducto;
import Data.config.SessionFac;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.swing.JProgressBar;
import org.apache.ibatis.session.SqlSession;
/**
 *
 * @author Nadhia
 */
public class GestionProduccion {
  
    //carga masiva prod x fase
      public static  void cargaMasivaProdxFase(String file){
                   SqlSession sqlSession= SessionFac.SessionFactory().openSession();
                    try{
                      
                       ServicioProductoxFase servProdxFase= new ServicioProductoxFase();       
                      
                       servProdxFase.cargaMasivaProdxFase(file,sqlSession);
                     
                       sqlSession.commit();
                    }
                    catch(Exception e){
                        sqlSession.rollback();
                    }
                    finally{
                            sqlSession.commit();
                        sqlSession.close();
                    }         
       }
	   
      
      
      
    
    
   public static List<ProductoF> obtenerProductos(){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.seleccionarTodo();
    } 
   
   public static List<HashMap<String,Object>> seleccionarProdFase(String idProducto){
        ServicioAsignacionReal sproducto = new ServicioAsignacionReal();
        return sproducto.seleccionarProdFase(idProducto);
    } 
   
   public static List<ProductoF> obtenerProductosPI(){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.seleccionarTodoPI();
    } 
   
   public static List<ProductoF> obtenerProductosInt(){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.seleccionarTodoInt();
    } 
   
   public static List<ProduccionRealRB> obtenerProduccionRB(){
        ServicioProduccionRealRB sproducccion = new ServicioProduccionRealRB();
        return sproducccion.seleccionarTodoRB();
    } 
   
   public static List<ProduccionRealRB> filtrarProduccion(String id, String nombre){
        ServicioProduccionRealRB sproducccion = new ServicioProduccionRealRB();
        return sproducccion.filtrarProduccion(id, nombre);
    }
   
   
   public static void agregarProducto(Ingrediente ingrediente){
            ServicioIngrediente singrediente = new ServicioIngrediente();
            singrediente.guardar(ingrediente);
    }
   
    public static void agregarProdReal(List<ProduccionReal> produccion){
            ServicioAsignacionReal singrediente = new ServicioAsignacionReal();
            singrediente.agregar(produccion);
    }
   
   
   
   
   public static List<Ingrediente> obtenerIngrediente(){
        ServicioIngrediente singrediente = new ServicioIngrediente();
        return singrediente.seleccionarTodoI();
    }
   
   public static List<ProductoF> obtenerProductosI(){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.seleccionarTodoI();
    }
   
   public static List<ProductoF> obtenerProductosR(){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.seleccionarTodoR();
    }
   
   
   public static List<Ingrediente> filtrarIngredientes(String id){
        ServicioIngrediente sIngrediente = new ServicioIngrediente();
        return sIngrediente.filtrarIngredientes(id);
    }
   public static void agregarReceta(Receta receta) throws Exception{
            ServicioReceta sreceta = new ServicioReceta();
            sreceta.guardar(receta);
    }
   
   public static void cambiarEstadoReceta(String id){
        ServicioReceta sreceta = new ServicioReceta();
        sreceta.cambiarEsRe(id);
    
   }    
   public static void cambiarEstadoRecetaA(String id){
        ServicioReceta sreceta = new ServicioReceta();
        sreceta.cambiarEsReA(id);
    }
   
   public static void agregarFase(Fase fase) throws Exception{
            ServicioFase sfase = new ServicioFase();
            sfase.guardar(fase);
    }
   
   public static void actualizarFase(Fase fase){
        ServicioFase sfase = new ServicioFase();
        sfase.actualizar(fase);
        
    }
   
   
   public static void agregarProductoxFase(ProductoxFase productoxfase) throws Exception {
            ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
            sprodxfa.guardar(productoxfase);
    }
   
   public static void actualizarProductoxFase(ProductoxFase productoxfase){
        ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
        sprodxfa.actualizar(productoxfase);
        
    }
   
   
   public static List<ProductoxFase> filtrarProductoxFase(String id, String nombre){
        ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
        return sprodxfa.filtrarProductoxFase(id, nombre);
    }

   public static List<ProductoxFase>  buscarProductoxFase(String id){
        
        ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
        return sprodxfa.buscarPxF(id);
        
        
    }
   
   public static List<ProductoReceta>  buscarProductoReceta(String id){
        
        ServicioProductoReceta sprodreceta = new ServicioProductoReceta();
        return sprodreceta.buscarProRe(id);
        
        
    }
   public static List<ProductoxFaseN>  buscarProductoxFaseN(String id){
        
        ServicioProductoxFaseN sprodxfan = new ServicioProductoxFaseN();
        return sprodxfan.buscarPxF(id);
        
        
    }
   public static List<PlanV>  buscarPlan(String id){
        
        ServicioPlanV spv = new ServicioPlanV();
        return spv.buscarPV(id);
        
        
    }
   
   public static void eliminarProductoxFase(ProductoxFase productoxfase){
        ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
        sprodxfa.eliminar(productoxfase);
        
    }
   
   public static void cambiarEstado(String id){
        ServicioProducto sproducto = new ServicioProducto();
        sproducto.cambiarEsFI(id);
    }
   
//   public static void eliminarProductoxFase(String idP,String idF){
//        ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
//        sprodxfa.eliminar(idP,idF);
//    }
   
   public static List<Maquina> obtenerTipo(){
//        return DataMemoria.obtenerDatos().tipos;
       ServicioMaquina smaquina = new ServicioMaquina();
       return smaquina.obtenerTipo();
    }
   
   public static List<Maquina> obtenerMaquinas(){
        ServicioMaquina smaquina = new ServicioMaquina();
        return smaquina.seleccionarTodo();
    }
   
      public static List<Maquina> obtenerMaquinasHabilitadas(){
        ServicioMaquina smaquina = new ServicioMaquina();
        return smaquina.seleccionarHabilitadas();
    }
   
   public static List<Maquina> filtrarMaquinas(String id, String nombre){
        ServicioMaquina smaquina = new ServicioMaquina();
        return smaquina.filtrarMaquinas(id, nombre);
    }
   
   public static List<ProductoF> filtrarProductos(String id, String nombre){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.filtrarProductos(id, nombre);
    }
   
   public static List<ProductoF> filtrarProductosR(String id, String nombre){
        ServicioProducto sproducto = new ServicioProducto();
        return sproducto.filtrarProductosR(id, nombre);
    }
   
   public static void agregarMaquina(Maquina maquina) throws Exception{
            ServicioMaquina smaquina = new ServicioMaquina();
            smaquina.guardar(maquina);
    }
   
   
   public static void actualizarMaquinas(Maquina maquina){
        ServicioMaquina smaquina = new ServicioMaquina();
        smaquina.actualizar(maquina);
        
    }
   
   
   
   public static void eliminarMaquinas(String id){
        ServicioMaquina smaquina = new ServicioMaquina();
        smaquina.eliminar(id);
    }

    public static void AgregarMaquinasMasivo(String RutaArchivo, JProgressBar jProgressBar2) throws FileNotFoundException, IOException, Exception {
        File f = new File(RutaArchivo);
         Date fecha = new Date();
         int porcentaje = 0;
         jProgressBar2.setValue(0);
         ArrayList<TipoMaquina> tiposMaquina = new ArrayList();
        FileReader fis = new FileReader(f);
        BufferedReader br = new BufferedReader(fis);
        String s = null;
        String idTipoMaquina = new String();
        String SplitBy = ",";
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        //DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        while((s=br.readLine())!=null){
           String[] datos = s.split(SplitBy);
           if(datos.length != 6){
               jProgressBar2.setValue(100);
               throw new Exception("");
           }
        Maquina maquina = new Maquina("",datos[0],datos[1],datos[2],formatter.parse(datos[3]),datos[4],datos[5]);
           agregarMaquina(maquina);
           porcentaje = porcentaje + 10;
           jProgressBar2.setValue(25+porcentaje%75);
        }
    }

    public static void HabilitarTodasLasMaquinas() throws Exception{
      ServicioMaquina smaquina = new ServicioMaquina();
            smaquina.HabilitarTodas();
    }

    public static void DesabilitarMaquinas(ArrayList<Maquina> maquinas, int numADesHabHorneado, int numADesHabDecorado, int numADesHabRellenado, int numADesHabEmpaquetado) {
        ServicioMaquina smaquina = new ServicioMaquina();
            smaquina.HabilitarTodas(maquinas, numADesHabHorneado, numADesHabDecorado, numADesHabRellenado, numADesHabEmpaquetado);
    }

    public static void AgregarRecetasMasivo(String RutaArchivo, JProgressBar jProgressBar2) throws Exception {
                File f = new File(RutaArchivo);
         
        String idReceta = new String();
        String codigo = new String();
        FileReader fis = new FileReader(f);
        jProgressBar2.setValue(0);
        int porcentaje = 0;
        BufferedReader br = new BufferedReader(fis);
        String s = null;
        String SplitBy = ",";

            s=br.readLine();
           String[] datos = s.split(SplitBy);
           if(datos.length != 6){
               jProgressBar2.setValue(100);
               throw new Exception("");
           }
           
        Receta receta = new Receta("",datos[0],datos[1],Double.parseDouble(datos[2]),datos[3],datos[4],datos[5]);
           codigo = datos[0];
            agregarReceta(receta);
           s=br.readLine();
           datos = s.split(SplitBy);
           if(datos.length != 7){
               throw new Exception("");
           }
           idReceta = maximoCodigoReceta();
           if(idReceta == null){
               idReceta = "REC000001";
           }
           Fase fase = new Fase("",idReceta,datos[0],Integer.parseInt(datos[1]),Double.parseDouble(datos[2]),datos[3],datos[4],Double.parseDouble(datos[5]),datos[6]);
           agregarFase(fase);
           s=br.readLine();
           if(datos.length != 7){
               throw new Exception("");
           }
           datos = s.split(SplitBy);
           fase = new Fase("",idReceta,datos[0],Integer.parseInt(datos[1]),Double.parseDouble(datos[2]),datos[3],datos[4],Double.parseDouble(datos[5]),datos[6]);
           agregarFase(fase);
          
           Controlador.Service.Produccion.GestionProduccion.cambiarEstado(codigo);
           
         s=br.readLine();
         datos = s.split(SplitBy);
           if(datos.length != 6){
               throw new Exception("");
           }
        receta = new Receta("",datos[0],datos[1],Double.parseDouble(datos[2]),datos[3],datos[4],datos[5]);
        codigo = datos[0];
           agregarReceta(receta);
            idReceta = maximoCodigoReceta();
         s=br.readLine();
           datos = s.split(SplitBy);
           if(datos.length != 7){
               throw new Exception("");
           }
          
            fase = new Fase("",idReceta,datos[0],Integer.parseInt(datos[1]),Double.parseDouble(datos[2]),datos[3],datos[4],Double.parseDouble(datos[5]),datos[6]);
           agregarFase(fase);
           
             s=br.readLine();
           datos = s.split(SplitBy);
           if(datos.length != 7){
               throw new Exception("");
           }
          
            fase = new Fase("",idReceta,datos[0],Integer.parseInt(datos[1]),Double.parseDouble(datos[2]),datos[3],datos[4],Double.parseDouble(datos[5]),datos[6]);
           agregarFase(fase);
           
             s=br.readLine();
           datos = s.split(SplitBy);
           if(datos.length != 7){
               throw new Exception("");
           }
          
            fase = new Fase("",idReceta,datos[0],Integer.parseInt(datos[1]),Double.parseDouble(datos[2]),datos[3],datos[4],Double.parseDouble(datos[5]),datos[6]);
           agregarFase(fase);
           porcentaje = porcentaje +10;
           Controlador.Service.Produccion.GestionProduccion.cambiarEstado(codigo);
           jProgressBar2.setValue(25+porcentaje%75);
           
        
    }

    private static String maximoCodigoReceta() throws Exception{
           ServicioReceta sreceta = new ServicioReceta();
        return sreceta.SeleccionarMaximoid();
        
    }

    public static int cuentaSalida(String dato) {
           ServicioProductoxFase sprodxfa = new ServicioProductoxFase();
           return sprodxfa.cuentaSal(dato);
        
    }



  
}
